package com.itheima.reggie.common;

import lombok.Data;

import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;


  /*通用返回结果，服务端响应的数据最终都会封装成此对象
  @param <T>*/
@Data
//@Cacheable 会将方法的返回值R缓存在Redis中，而在Redis中存储对象，
// 该对象是需要被序列化的，而对象要想被成功的序列化，就必须得实现 Serializable 接口
public class R<T> implements Serializable {
    private Integer code; //编码：1成功，0和其它数字为失败
    private String msg; //错误信息
    private T data; //数据
    private Map map = new HashMap(); //动态数据

    public static <T> R<T> success(T object) {
        R<T> r = new R<T>();
        r.data = object;
        r.code = 1;
        return r;
    }
    public static <T> R<T> error(String msg) {
        R r = new R();
        r.msg = msg;
        r.code = 0;
        return r;
    }
    public R<T> add(String key, Object value) {
        this.map.put(key, value);
        return this;
    }
    /*
    此类是一个通用结果类，服务端响应的所有结果最终都会包装成此种类型返回给前端页面。
    A. 如果业务执行结果为成功, 构建R对象时, 只需要调用 success 方法; 如果需要返回数据传递 object 参数, 如果无需返回, 可以直接传递null。

    B. 如果业务执行结果为失败, 构建R对象时, 只需要调用error 方法, 传递错误提示信息即可。
    */
}